package com.mapaoer.user.service;

import com.mapaoer.user.dto.LoginDTO;
import com.mapaoer.user.dto.RegisterDTO;
import com.mapaoer.user.dto.UpdateProfileDTO;
import com.mapaower.user.dto.*;
import com.mapaoer.user.entity.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import java.util.Date;

/**
 * 用户服务接口
 * 定义用户相关的业务操作方法
 */
public interface UserService extends UserDetailsService {

    /**
     * 用户注册
     * @param registerDTO 注册信息
     * @return 注册结果
     */
    boolean register(RegisterDTO registerDTO);

    /**
     * 用户登录
     * @param loginDTO 登录信息
     * @return 登录结果（JWT Token）
     */
    String login(LoginDTO loginDTO);

    // 手机号+密码登录
    String loginByPhonePassword(String phone, String password);

    // 手机号+短信验证码登录
    String loginBySmsCode(String phone, String smsCode);

    // 微信登录
    String loginByWechat(String code);

    // 支付宝登录
    String loginByAlipay(String authCode);

    // 发送短信验证码
    boolean sendSmsCode(String phone);

    /**
     * 根据ID获取用户信息
     * @param id 用户ID
     * @return 用户信息
     */
    User getUserById(Long id);

    /**
     * 更新会员有效期
     */
    void updateMembershipExpiry(Long userId, Date startTime, Date endTime);

    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户信息
     */
    User getUserByUsername(String username);

    /**
     * 更新用户资料
     * @param id 用户ID
     * @param updateProfileDTO 更新信息
     * @return 更新结果
     */
    boolean updateProfile(Long id, UpdateProfileDTO updateProfileDTO);

    /**
     * 更新用户密码
     * @param id 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 更新结果
     */
    boolean updatePassword(Long id, String oldPassword, String newPassword);

    /**
     * 禁用用户
     * @param id 用户ID
     * @return 操作结果
     */
    boolean disableUser(Long id);

    /**
     * 启用用户
     * @param id 用户ID
     * @return 操作结果
     */
    boolean enableUser(Long id);
}